package Strategy;

import Factory.AgriculturalMachine;
import Factory.MachineType;
import Observer.EnvironmentData;

// 风速异常时的作业策略（过高或过低）
public class WindSpeedStrategy implements OperationStrategy {
    private static final double HIGH_WIND_THRESHOLD = 20;  // 高风速阈值
    private static final double LOW_WIND_THRESHOLD = 2;    // 低风速阈值

    @Override
    public void adjust(AgriculturalMachine machine, EnvironmentData data) {
        double windSpeed = data.getWindSpeed();

        if (windSpeed > HIGH_WIND_THRESHOLD) {
            handleHighWind(machine, windSpeed);
        } else if (windSpeed < LOW_WIND_THRESHOLD) {
            handleLowWind(machine, windSpeed);
        } else {
            // 风速正常，使用标准策略
            System.out.println(machine.getType() + " 风速正常（" + windSpeed + "km/h），使用标准作业策略");
        }
    }

    private void handleHighWind(AgriculturalMachine machine, double windSpeed) {
        switch (machine.getType()) {
            case SPRAYER:
                System.out.println(machine.getType() + " 检测到高风速（" + windSpeed + "km/h），已暂停喷洒作业");
                // 具体逻辑：停止喷洒，防止药剂飘散
                break;
            case HARVESTER:
                System.out.println(machine.getType() + " 检测到高风速（" + windSpeed + "km/h），已降低收割速度");
                // 具体逻辑：降低速度，防止谷物被吹走
                break;
            case SEEDER:
                System.out.println(machine.getType() + " 检测到高风速（" + windSpeed + "km/h），已暂停播种作业");
                // 具体逻辑：停止播种，防止种子被吹走
                break;
            case TRACTOR:
                System.out.println(machine.getType() + " 检测到高风速（" + windSpeed + "km/h），已降低行驶速度");
                // 具体逻辑：降低速度，提高行驶稳定性
                break;
        }
    }

    private void handleLowWind(AgriculturalMachine machine, double windSpeed) {
        switch (machine.getType()) {
            case SPRAYER:
                System.out.println(machine.getType() + " 检测到低风速（" + windSpeed + "km/h），已优化喷洒模式");
                // 具体逻辑：使用更精细的喷洒模式，提高覆盖均匀性
                break;
            case HARVESTER:
                System.out.println(machine.getType() + " 检测到低风速（" + windSpeed + "km/h），已降低除尘系统功率");
                // 具体逻辑：低风速下尘土扩散慢，降低除尘能耗
                break;
            case SEEDER:
                System.out.println(machine.getType() + " 检测到低风速（" + windSpeed + "km/h），已调整播种参数");
                // 具体逻辑：调整播种参数，提高播种精度
                break;
            case TRACTOR:
                System.out.println(machine.getType() + " 检测到低风速（" + windSpeed + "km/h），已优化行进路线");
                // 具体逻辑：优化路线，提高作业效率
                break;
        }
    }
}